﻿package core.image.psd
{
    import flash.display.*;
    import flash.utils.*;

    public class ImageHelper extends Object
    {

        public function ImageHelper()
        {
            return;
        }// end function

        public static function DecodeRleRow(E:\editor;core\image\psd;ImageHelper.as:ByteArrayReader, E:\editor;core\image\psd;ImageHelper.as:ByteArray, E:\editor;core\image\psd;ImageHelper.as:int, E:\editor;core\image\psd;ImageHelper.as:int, E:\editor;core\image\psd;ImageHelper.as:int) : void
        {
            var _loc_6:int = 0;
            var _loc_7:int = 0;
            var _loc_8:int = 0;
            while (_loc_8 < E:\editor;core\image\psd;ImageHelper.as)
            {
                
                _loc_6 = E:\editor;core\image\psd;ImageHelper.as.ReadByte();
                _loc_7 = _loc_6;
                if (_loc_7 < 128)
                {
                    _loc_7++;
                    while (_loc_7 != 0 && E:\editor;core\image\psd;ImageHelper.as + _loc_8 < E:\editor;core\image\psd;ImageHelper.as)
                    {
                        
                        _loc_6 = E:\editor;core\image\psd;ImageHelper.as.ReadByte();
                        E:\editor;core\image\psd;ImageHelper.as[E:\editor;core\image\psd;ImageHelper.as + _loc_8] = _loc_6;
                        _loc_8++;
                        _loc_7 = _loc_7 - 1;
                    }
                    continue;
                }
                if (_loc_7 > 128)
                {
                    _loc_7 = _loc_7 ^ 255;
                    _loc_7 = _loc_7 + 2;
                    _loc_6 = E:\editor;core\image\psd;ImageHelper.as.ReadByte();
                    while (_loc_7 != 0 && E:\editor;core\image\psd;ImageHelper.as + _loc_8 < E:\editor;core\image\psd;ImageHelper.as)
                    {
                        
                        E:\editor;core\image\psd;ImageHelper.as[E:\editor;core\image\psd;ImageHelper.as + _loc_8] = _loc_6;
                        _loc_8++;
                        _loc_7 = _loc_7 - 1;
                    }
                }
            }
            return;
        }// end function

        public static function DecodeMask(ByteArrayReader:PSDFile, ByteArrayReader:Layer) : Bitmap
        {
            var _loc_3:int = 0;
            var _loc_4:uint = 0;
            var _loc_5:uint = 0;
            var _loc_6:uint = 0;
            var _loc_8:int = 0;
            if (ByteArrayReader.MaskData.Dimensions.width == 0 || ByteArrayReader.MaskData.Dimensions.height == 0)
            {
                return null;
            }
            var _loc_7:* = new BitmapData(ByteArrayReader.MaskData.Dimensions.width, ByteArrayReader.MaskData.Dimensions.height);
            _loc_7.lock();
            while (_loc_8 < ByteArrayReader.MaskData.Dimensions.height)
            {
                
                _loc_3 = 0;
                while (_loc_3 < ByteArrayReader.MaskData.Dimensions.width)
                {
                    
                    _loc_4 = PixelHelper.ColorFromLayer(ByteArrayReader, ByteArrayReader, _loc_8 * ByteArrayReader.MaskData.Dimensions.width + _loc_3);
                    if (ByteArrayReader.SortedChannels[-2])
                    {
                        _loc_5 = PixelHelper.ColorFromMask(ByteArrayReader, _loc_3, _loc_8);
                        _loc_6 = (_loc_4 >> 24) * _loc_5 / 255;
                        _loc_4 = PixelHelper.BlendAlpha(_loc_6, _loc_4);
                    }
                    _loc_7.setPixel32(_loc_3, _loc_8, _loc_4);
                    _loc_3++;
                }
                _loc_8++;
            }
            _loc_7.unlock();
            return new Bitmap(_loc_7);
        }// end function

        public static function DecodeLayer(_local6:PSDFile, _local6:Layer) : BitmapData
        {
            var _loc_3:uint = 0;
            var _loc_4:uint = 0;
            var _loc_5:uint = 0;
            var _loc_6:uint = 0;
            var _loc_7:int = 0;
            var _loc_8:int = 0;
            var _loc_9:int = 0;
            var _loc_11:int = 0;
            if (_local6.Dimensions.width == 0 || _local6.Dimensions.height === 0)
            {
                return null;
            }
            var _loc_10:* = new BitmapData(_local6.Dimensions.width, _local6.Dimensions.height, true, 16777215);
            while (_loc_11 < _local6.Dimensions.height)
            {
                
                _loc_8 = 0;
                while (_loc_8 < _local6.Dimensions.width)
                {
                    
                    _loc_7 = _loc_11 * _local6.Dimensions.width + _loc_8;
                    _loc_4 = !_local6.SortedChannels[-1] ? (255) : (_local6.SortedChannels[-1].Data[_loc_7]);
                    switch(_local6.header.ColorMode)
                    {
                        case 3:
                        {
                            _loc_3 = _loc_4 << 24 | _local6.SortedChannels[0].Data[_loc_7] << 16 | _local6.SortedChannels[1].Data[_loc_7] << 8 | _local6.SortedChannels[2].Data[_loc_7];
                            break;
                        }
                        case 4:
                        {
                            _loc_3 = PixelHelper.CMYKColor(_loc_4, _local6.SortedChannels[0].Data[_loc_7], _local6.SortedChannels[1].Data[_loc_7], _local6.SortedChannels[2].Data[_loc_7], _local6.SortedChannels[3].Data[_loc_7]);
                            break;
                        }
                        case 7:
                        case 1:
                        case 8:
                        {
                            _loc_3 = PixelHelper.ARGBColor(_loc_4, _local6.SortedChannels[0].Data[_loc_7], _local6.SortedChannels[0].Data[_loc_7], _local6.SortedChannels[0].Data[_loc_7]);
                            break;
                        }
                        case 2:
                        {
                            _loc_9 = _local6.SortedChannels[0].Data[_loc_7];
                            _loc_3 = PixelHelper.ARGBColor(_loc_4, _local6.IndexData[_loc_9], _local6.IndexData[_loc_9 + 256], _local6.IndexData[_loc_9 + 512]);
                            break;
                        }
                        case 9:
                        {
                            _loc_3 = PixelHelper.LabColor(_loc_4, _local6.SortedChannels[0].Data[_loc_7], _local6.SortedChannels[1].Data[_loc_7], _local6.SortedChannels[2].Data[_loc_7]);
                            break;
                        }
                        default:
                        {
                            _loc_3 = 0;
                            break;
                        }
                    }
                    if (_local6.SortedChannels[-2])
                    {
                        _loc_5 = PixelHelper.ColorFromMask(_local6, _loc_8, _loc_11);
                        _loc_6 = (_loc_3 >> 24) * _loc_5 / 255;
                        _loc_3 = PixelHelper.BlendAlpha(_loc_6, _loc_3);
                    }
                    _loc_10.setPixel32(_loc_8, _loc_11, _loc_3);
                    _loc_8++;
                }
                _loc_11++;
            }
            return _loc_10;
        }// end function

        public static function DecodePSDFile(_local6:PSDFile) : BitmapData
        {
            var _loc_2:uint = 0;
            var _loc_3:int = 0;
            var _loc_4:int = 0;
            var _loc_5:int = 0;
            var _loc_7:int = 0;
            var _loc_6:* = new BitmapData(_local6.header.Columns, _local6.header.Rows, true, 16777215);
            while (_loc_7 < _local6.header.Rows)
            {
                
                _loc_4 = 0;
                while (_loc_4 < _local6.header.Columns)
                {
                    
                    _loc_3 = _loc_7 * _local6.header.Columns + _loc_4;
                    switch(_local6.header.ColorMode)
                    {
                        case 3:
                        {
                            _loc_2 = 255 << 24 | _local6.Data[0][_loc_3] << 16 | _local6.Data[1][_loc_3] << 8 | _local6.Data[2][_loc_3];
                            break;
                        }
                        case 4:
                        {
                            _loc_2 = PixelHelper.CMYKColor(255, _local6.Data[0][_loc_3], _local6.Data[1][_loc_3], _local6.Data[2][_loc_3], _local6.Data[3][_loc_3]);
                            break;
                        }
                        case 7:
                        case 1:
                        case 8:
                        {
                            _loc_2 = PixelHelper.ARGBColor(255, _local6.Data[0][_loc_3], _local6.Data[0][_loc_3], _local6.Data[0][_loc_3]);
                            break;
                        }
                        case 2:
                        {
                            _loc_5 = _local6.Data[0][_loc_3];
                            _loc_2 = PixelHelper.ARGBColor(255, _local6.IndexData[_loc_5], _local6.IndexData[_loc_5 + 256], _local6.IndexData[_loc_5 + 512]);
                            break;
                        }
                        case 9:
                        {
                            _loc_2 = PixelHelper.LabColor(255, _local6.Data[0][_loc_3], _local6.Data[1][_loc_3], _local6.Data[2][_loc_3]);
                            break;
                        }
                        default:
                        {
                            _loc_2 = 0;
                            break;
                        }
                    }
                    _loc_6.setPixel32(_loc_4, _loc_7, _loc_2);
                    _loc_4++;
                }
                _loc_7++;
            }
            return _loc_6;
        }// end function

    }
}
